#include "AdvanceLinkList.h"
/**
 * 构造一个空的线性表
 */
Status AdvanceLinkList::InitList(void)
{
    LinkNode *p = (LinkNode*)malloc(sizeof(LinkNode));
    if (p) {
        p->next = nullptr;
        L.head = L.tail = p;
        L.len = 0;
    } else {
        exit(OVERFLOW);
    }
    return OK;
}
/**
 * 销毁线性表
 */
Status AdvanceLinkList::DestoryList(void)
{
    ClearList();
    freeNode(L.head);
    L.tail = NULL;
    L.len = 0;
    return OK;
}
/**
 * 清空线性表
 */
Status AdvanceLinkList::ClearList(void)
{
    LinkNode *p, *q;

    if (L.head != L.tail) {
        p = q = L.head->next;
        L.head->next = nullptr;

        while (p != L.tail) {
            p = q->next;
            free(q);
            q = p;
        }

        free(q);
        L.head = L.tail;
        L.len = 0;
    }

    return OK;
}
/**
 * 线性表是否为空
 */
Status AdvanceLinkList::ListEmpty(void)
{
    return OK;
}
/**
 * 线性表长度
 */
int AdvanceLinkList::ListLength(void)
{
    return 0;
}
/**
 * 获取线性表第i个位置的元素
 */
Status AdvanceLinkList::GetElem(int i, ElemType *e)
{
    return OK;
}
/**
 * 返回L中第1个与e满足关系compare()的数据元素的位置
 */
int AdvanceLinkList::LocateElem(ElemType e, Status(*compare)(ElemType, ElemType))
{
    return 0;
}
/**
 * 返回线性表前驱
 */
Status AdvanceLinkList::PriorElem(ElemType cur, ElemType *prev)
{
    return OK;
}
/**
 * 返回线性表后继
 */
Status AdvanceLinkList::NextElem(ElemType cur, ElemType *next)
{
    return OK;
}
/**
 * 线性表第i个位置插入e
 */
Status AdvanceLinkList::ListInsert(int i, ElemType e)
{
    return OK;
}
/**
 * 删除线性表第i个位置元素
 */
Status AdvanceLinkList::ListDelete(int i, ElemType *e)
{
    return OK;
}
/**
 * 遍历线性表
 */
Status AdvanceLinkList::ListTraverse(void)
{
    return OK;
}
/**
 * 合并两个线性表
 * 将线性表Lb中不在La中的数据元素插入到La中
 */
Status AdvanceLinkList::ListMerge(List *Lb)
{
    return OK;
}
/**
 * 头部插入节点
 */
Status AdvanceLinkList::ListHeadInsert(ElemType e)
{
    return OK;
}
/**
 * 尾部插入节点
 */
Status AdvanceLinkList::ListTailInsert(ElemType e)
{
    return OK;
}